﻿Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Configuration
Imports System.Data
Imports System.Data.SqlClient

Public Class FrmLocalidad
    Dim dao As New DAOGeneral
    Dim operacion As accion 'estado de la operacion en curso
    Dim ventanaPadre As Form
    Dim vengoDesdeMenuPrincipal As Boolean 'variable q me dice si vengo desde un form o desde el menu ppal
    Dim id_local As Integer

    Public Sub New(ByRef ventana As Form)
        InitializeComponent()
        Me.ventanaPadre = ventana
        Me.ventanaPadre.Enabled = False
        vengoDesdeMenuPrincipal = False
        btnNuevo.Enabled = False 'deshabilito el btn nuevo y eliminar
        btnEliminar.Enabled = False
        txt_descripcion.Focus()
    End Sub

    Public Sub New()
        InitializeComponent()  ' Llamada necesaria para el diseñador.
        vengoDesdeMenuPrincipal = True
        btnNuevo.Enabled = False
        btnEliminar.Enabled = False
        txt_descripcion.Focus()
    End Sub

    Enum accion 'tipificacion de estado de la operacion en curso
        insertar
        modificar
    End Enum

    Private Sub FrmLocalidad_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        If vengoDesdeMenuPrincipal = True Then 'si vengo desde el menu ppal solo cierro la ventana
            Me.Dispose()
        Else 'si vengo de un form distinto al ppal
            Me.Close()  'cierra el formulario
            ventanaPadre.Enabled = True 'Habilita el form principal
            ventanaPadre.Focus()        'y le hace foco
        End If
    End Sub

    Private Sub FrmLocalidad_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        txt_descripcion.Focus()
        Me.cargarGrilla() 'lleno la grilla con todos las localidades
        btnNuevo.Enabled = False '
        btnEliminar.Enabled = False
        Me.operacion = accion.insertar  'setea el estado de la operacion en insertar
    End Sub

    Private Sub cargarGrilla()
        Dim tabla As New Data.DataTable
        tabla = dao.cargarTabla()
        Me.grid_localidad.DataSource = tabla
        grid_localidad.AutoResizeColumns() 'define automaticamente el ancho de las columnas de la grilla conforme al contenido
    End Sub


    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        If vengoDesdeMenuPrincipal = True Then
            Me.Dispose()
        Else
            Me.Close()  'cierra el formulario
            ventanaPadre.Enabled = True 'Habilita el menú principal
            ventanaPadre.Focus()        'y le hace foco
        End If
    End Sub


    Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminar.Click
        'pregunta al usuario si desea eliminar
        If MessageBox.Show("¿Está seguro que desea Eliminar " & Me.grid_localidad.CurrentRow.Cells(1).Value & "?", "Eliminar Localidad", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

            If dao.EliminarLocalidad(Me.grid_localidad.CurrentRow.Cells(0).Value) = True Then 'utiliza el metodo borrar pasando el comando correspondiente con valores de id de la fila seleccionada  
                Me.lbl_mensaje.ForeColor = Color.Blue
                Me.lbl_mensaje.Text = "Localidad eliminada con éxito."    'muestra un mensaje al usuario
                Me.txt_descripcion.Text = ""    'setea en blanco el campo
                txt_descripcion.Focus()
                cargarGrilla()   'actualiza la visualizacion de la tabla con los nuevos valores modificados
            Else
                Me.lbl_mensaje.ForeColor = Color.Red
                Me.lbl_mensaje.Text = "Localidad no pudo ser eliminada"    'muestra un mensaje al usuario
                Me.txt_descripcion.Text = ""    'setea en blanco el campo
                txt_descripcion.Focus()
            End If
        End If
    End Sub

    Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click
        If Me.txt_descripcion.Text = "" Then  'valida el campo descripcion
            Me.lbl_mensaje.ForeColor = Color.Red
            Me.lbl_mensaje.Text = "¡Campo vacío!"
            Me.txt_descripcion.Focus()
            Exit Sub
        End If

        If Me.operacion = accion.insertar Then  'si la operacion en curso es insertar:
            If dao.GuardarLocalidad(Me.txt_descripcion.Text) = True Then
                Me.lbl_mensaje.ForeColor = Color.Blue
                Me.lbl_mensaje.Text = "Localidad guardada con éxito." 'muestra un mensaje al usuario
            Else
                Me.lbl_mensaje.ForeColor = Color.Blue
                Me.lbl_mensaje.Text = "La localidad no se pudo guardar" 'muestra un mensaje al usuario
            End If
        End If


        If Me.operacion = accion.modificar Then 'si la operacion es modificar:
            If dao.ActualizarLocalidad(Me.txt_descripcion.Text.ToUpper.Trim, Me.grid_localidad.CurrentRow.Cells(0).Value) = True Then 'si se modifico correctamente
                Me.lbl_mensaje.ForeColor = Color.Blue
                Me.lbl_mensaje.Text = "Localidad modificada con éxito."   'muestra un mensaje al usuario
            Else
                Me.lbl_mensaje.ForeColor = Color.Blue
                Me.lbl_mensaje.Text = "Localidad no modificada"   'muestra un mensaje al usuario
            End If

        End If

        Me.txt_descripcion.Text = ""    'setea en blanco el campo
        txt_descripcion.Focus() 'vuelvo el foco al txt
        cargarGrilla()   'actualiza la visualizacion de la tabla con los nuevos valores modificados

    End Sub

    'metodo para ir filtrando a medida q se escribe la localidad
    Private Sub txt_descripcion_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txt_descripcion.TextChanged
        grid_localidad.DataSource = dao.buscarLocalidadXNombre(txt_descripcion.Text) 'voy filtrando en la grilla a medida que inserta el nombre

        If grid_localidad.Rows.Count = 0 Then
            btnNuevo.Enabled = True
            operacion = accion.insertar
        Else
            btnNuevo.Enabled = False
            operacion = accion.modificar
        End If
    End Sub

    Private Sub grid_localidad_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grid_localidad.CellClick
        btnEliminar.Enabled = True
    End Sub

    Private Sub grid_localidad_CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grid_localidad.CellDoubleClick
        Me.operacion = accion.modificar
        Me.txt_descripcion.Focus()
        Me.txt_descripcion.Text = Me.grid_localidad.CurrentRow.Cells(1).Value 'muestra el contenido del campo a modificar
        id_local = Integer.Parse(grid_localidad.CurrentRow.Cells(0).Value.ToString())
    End Sub
End Class